package seggio;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class StartConfigSeggio extends Thread {
    
    public StartConfigSeggio() throws UnknownHostException, IOException{
        
    }
    
    //metodo che invia i dati del seggio al serve centrale "Interno"
    public boolean registrazioneSeggio(int ID_SEGGIO, String REGIONE, String IP_SEGGIO, int PORTA_SEGGIO, String IP_INTERNO, int PORTA_INTERNO) throws InterruptedException {
        
        try {
            Socket socket = new Socket(IP_INTERNO, PORTA_INTERNO);
            // Apre i canali I/O
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintStream out = new PrintStream(socket.getOutputStream(), true);

            out.println("REGISTRAZIONE " + ID_SEGGIO + " " + IP_SEGGIO + " " + PORTA_SEGGIO + " " + REGIONE);
            
            out.close();
            in.close();
            return true; 
        
        } catch (UnknownHostException ex) {
            /* il logger permette di inviare messaggi verso una determita destinazione,           
             * tutti i logger si chiameranno con il nome della classe che li contiene.
             * il livello di dettaglio per il log è impostato su SEVERE.
             */       
            Logger.getLogger(StartConfigSeggio.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            System.err.printf("server interno non attivo, attivarlo e rilanciare l'applicazione", ex);
            System.exit(1);
            Logger.getLogger(StartConfigSeggio.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    public boolean comunicaIPSeggioAllaCabina(String cabinaLibera, int portCabina) {        
        
        DOMxml domXMLSeggio = new DOMxml("src/config/configSeggio.xml", "seggio");
        System.out.println("mando alla cabina "+cabinaLibera+":"+portCabina+" l'IP del seggio "+domXMLSeggio.getIPSeggio());
        
        try {            
            Socket socket = new Socket(cabinaLibera, portCabina);
            
            // Apre i canali I/O
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintStream out = new PrintStream(socket.getOutputStream(), true);

            out.println("IP_SEGGIO " + domXMLSeggio.getIPSeggio());
            
            out.close();
            in.close();
            return true; 
        
        } catch (UnknownHostException ex) {
            /* il logger permette di inviare messaggi verso una determita destinazione,           
             * tutti i logger si chiameranno con il nome della classe che li contiene.
             * il livello di dettaglio per il log è impostato su SEVERE.
             */
            Logger.getLogger(StartConfigSeggio.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            System.err.printf("nessuna cabina attiva, attivarlo e rilanciare l'applicazione", ex);
            System.exit(1);
            Logger.getLogger(StartConfigSeggio.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    public boolean comunicaPORTASeggioAllaCabina(String cabinaLibera, int portCabina) {        
        
        DOMxml domXMLSeggio = new DOMxml("src/config/configSeggio.xml", "seggio");
        System.out.println("mando alla cabina "+cabinaLibera+":"+portCabina+" la PORTA del seggio "+domXMLSeggio.getPortaSeggio());
        
        try {
            
            Socket socket = new Socket(cabinaLibera, portCabina);
            // Apre i canali I/O
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintStream out = new PrintStream(socket.getOutputStream(), true);
            
            out.println("PORTA_SEGGIO " + domXMLSeggio.getPortaSeggio());
            
            out.close();
            in.close();
            return true; 
        
        } catch (UnknownHostException ex) {
            /* il logger permette di inviare messaggi verso una determita destinazione,           
             * tutti i logger si chiameranno con il nome della classe che li contiene.
             * il livello di dettaglio per il log è impostato su SEVERE.
             */
            Logger.getLogger(StartConfigSeggio.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(StartConfigSeggio.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
}

